package com.warm.orm.eq.sys.mapper.impl;

import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.ObjUtil;
import cn.hutool.core.util.StrUtil;
import com.easy.query.api4j.client.EasyQuery;
import com.easy.query.api4j.select.Queryable;
import com.easy.query.solon.annotation.Db;
import com.warm.orm.domain.sys.SysPost;
import com.warm.orm.domain.sys.SysUser;
import com.warm.orm.domain.sys.SysUserPost;
import com.warm.orm.eq.sys.mapper.SysPostMapper;
import org.noear.solon.annotation.Component;

import java.util.List;
import java.util.Map;

@Component
public class SysPostMapperImpl implements SysPostMapper {

    @Db
    private EasyQuery easyQuery;

    private Queryable<SysPost> buildQuery(Map<String, Object> paraMap) {
        Long userId = (Long) paraMap.get("userId");
        String userName = (String) paraMap.get("userName");

        return this.easyQuery.queryable(SysPost.class)
                .leftJoin(SysUserPost.class, (t1, t2) -> t2.eq(t1, SysUserPost::getPostId, SysPost::getPostId))
                .leftJoin(SysUser.class, (t1, t2, t3) -> t3.eq(t2, SysUser::getUserId, SysUserPost::getUserId))
                .where((t1, t2, t3) -> t3
                        .eq(ObjUtil.isNotNull(userId), SysUser::getUserId, userId)
                        .like(StrUtil.isNotBlank(userName), SysUser::getUserName, userName));
    }

    /**
     * 查询岗位数据集合
     *
     * @param post 岗位信息
     * @return 岗位数据集合
     */
    @Override
    public List<SysPost> selectPostList(SysPost post) {
        return this.easyQuery.queryable(SysPost.class).toList();
    }

    /**
     * 查询所有岗位
     *
     * @return 岗位列表
     */
    @Override
    public List<SysPost> selectPostAll() {
        return this.easyQuery.queryable(SysPost.class).toList();
    }

    /**
     * 通过岗位ID查询岗位信息
     *
     * @param postId 岗位ID
     * @return 角色对象信息
     */
    @Override
    public SysPost selectPostById(Long postId) {
        return null;
    }

    /**
     * 根据用户ID获取岗位选择框列表
     *
     * @param userId 用户ID
     * @return 选中岗位ID列表
     */
    @Override
    public List<Long> selectPostListByUserId(Long userId) {
        return buildQuery(MapUtil.of("userId", userId)).select(Long.class, t1 -> t1.column(SysPost::getPostId)).toList();
    }

    /**
     * 查询用户所属岗位组
     *
     * @param userName 用户名
     * @return 结果
     */
    @Override
    public List<SysPost> selectPostsByUserName(String userName) {
        return buildQuery(MapUtil.of("userName", userName)).select(SysPost.class).toList();
    }

    /**
     * 删除岗位信息
     *
     * @param postId 岗位ID
     * @return 结果
     */
    @Override
    public int deletePostById(Long postId) {
        return 0;
    }

    /**
     * 批量删除岗位信息
     *
     * @param postIds 需要删除的岗位ID
     * @return 结果
     */
    @Override
    public int deletePostByIds(Long[] postIds) {
        return 0;
    }

    /**
     * 修改岗位信息
     *
     * @param post 岗位信息
     * @return 结果
     */
    @Override
    public int updatePost(SysPost post) {
        return 0;
    }

    /**
     * 新增岗位信息
     *
     * @param post 岗位信息
     * @return 结果
     */
    @Override
    public int insertPost(SysPost post) {
        return 0;
    }

    /**
     * 校验岗位名称
     *
     * @param postName 岗位名称
     * @return 结果
     */
    @Override
    public SysPost checkPostNameUnique(String postName) {
        return null;
    }

    /**
     * 校验岗位编码
     *
     * @param postCode 岗位编码
     * @return 结果
     */
    @Override
    public SysPost checkPostCodeUnique(String postCode) {
        return null;
    }
}
